/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package sisgraf.model;
import java.io.Serializable;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToMany;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import javax.persistence.JoinTable;

/**
 *
 * @author POSITIVO R41
 */
@Entity
public class Usuario implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue
    private Integer id;
    private String nome;
    private String login;
    private String senha;
    private String funcao;
    private String ativo;
    @ManyToMany(fetch = FetchType.LAZY)
    @JoinTable( name = "usuarioPerfil",
                catalog = "sisgraf",
                joinColumns = { @JoinColumn(    name = "idUsuario",
                                                nullable = false,
                                                updatable = false
                                )
                },
                inverseJoinColumns = {  @JoinColumn(    name = "idPerfil",
                                                        nullable = false,
                                                        updatable = false
                                        )
                }
    )
    private Set<Perfil> perfil = new HashSet<Perfil>(0);

    public Usuario() {
    }

    public Usuario(Integer id) {
        this.id = id;
    }

    public Usuario(Integer id, String nome, String login, String senha, String funcao, String ativo) {
        this.id = id;
        this.nome = nome;
        this.login = login;
        this.senha = senha;
        this.funcao = funcao;
        this.ativo = ativo;
    }

    public String getAtivo() {
        return ativo;
    }
    public String getAtivoDes() {
        if (ativo.equals("S"))
           return "Sim";
        else if (ativo.equals("N"))
           return "Não";
        else
           return ativo;
    }

    public void setAtivo(String ativo) {
        this.ativo = ativo;
    }

    public String getFuncao() {
        return funcao;
    }

    public void setFuncao(String funcao) {
        this.funcao = funcao;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getLogin() {
        return login;
    }

    public void setLogin(String login) {
        this.login = login;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public Set<Perfil> getPerfil() {
        return perfil;
    }

    public Perfil getPerfilUnico() {
        Perfil retorno = null;
        Iterator it = perfil.iterator();
	while (it.hasNext())
	{
	   retorno= (Perfil) it.next();
	}

        return retorno;
    }

    public void setPerfil(Set<Perfil> perfil) {
        this.perfil = perfil;
    }
    public void setPerfilUnico(Perfil perfil) {
        this.perfil.clear();
        boolean add = this.perfil.add(perfil);
    }

    public String getSenha() {
        return senha;
    }

    public void setSenha(String senha) throws NoSuchAlgorithmException {
        this.senha = criptografa(senha);
    }
    public String criptografa(String senha) throws NoSuchAlgorithmException {
        MessageDigest md = null;
        md = MessageDigest.getInstance("MD5");
        BigInteger hash = new BigInteger(1, md.digest(senha.getBytes()));
        String resposta = hash.toString(16);
        while (resposta.length() < 32) {
            resposta = "0" + resposta;
        }

        return resposta;
    }

}
